╔F YOU'VE EVER DISASSEMBLED A MACHINE LANGUAGE PROGRAM, YOU'VE PROBABLY SEEN SUCH STATEMENTS AS ╩╙╥ $├738. ╫OULDN'T IT BE BETTER TO SEE ╩╙╥ ─╔╙╨╠┴┘ INSTEAD?
"╙MART ─ISASSEMBLER" IS A ╥┴═-BASED DISASSEMBLER THAT REPLACES ALL THE ADDRESSES IN ╩═╨ AND ╩╙╥ COMMANDS WITH MEANINGFUL LABLES WHENEVER POSSIBLE. ╘HE PROGRAM CAN SEND DISASSEMBLY TO THE SCREEN OR PRINTER, AND IT CAN ALSO DISASSEMBLE MACHINE LANGUAGE PROGRAMS LOCATED UNDER THE ┬┴╙╔├ OR ╦ERNAL ╥╧═.
╟ETTING ╙TARTED
"╙MART ─ISASSEMBLER" IS WRITTEN ENTIRELY IN ┬┴╙╔├. ╒SING "╘HE ┴UTOMATIC ╨ROOFREADER" FROM ├OMPUTE'S ╟AZETTE, CAREFULLY TYPE IN ╙MART ─ISASSEMBLER AND SAVE IT TO TAPE OR DISK BEFORE ATTEMPTING TO RUN IT.
╘O USE ╙MART DISASSEMBLER FIRST LOAD THE MACHINE LANGUAGE (═╠) PROGRAM YOU'D LIKE TO DISASSEMBLE; THEN LOAD AND RUN SMART DISASSEMBLER. ┼NTER THE ═╠ PROGRAMS STARTING ADDRESS IN DECIMAL. ╬EXT ENTER AN ADDRESS WHERE YOU WOULD LIKE THE DISASSEMBLY TO STOP. ╔F YOU DON'T WANT SMART DISASSEMBLER TO STOP AUTOMATICALLY, JUST PRESS RETURN.
╬EXT THE MAIN MENU APPEARS. ╒SE THE FUNCTION KEYS TO MAKE A SELECTION. ╨RESS ╞1 TO BEGIN DISASSEMBLY OR ╞8 TO EXIT ╙MART ─ISASSEMBLER. ╨RESS ╞3 TO TOGGLE THE USE OF SUBROUTINE LABLES ON AND OFF, ╞5 TO SWITCH BETWEEN DECIMAL AND HEXIDECIMAL OUTPUT, AND ╟╞7 TO ENABLE OR DISABLE OUTPUT TO THE PRINTER. ╘HE ╞6 KEY TOGGLES THE ABILITY TO DISASSEMBLE ╥┴═ UNDER ╥╧═. ╙ET THIS OPTION TO YES IF THE PROGRAM YOU WANT TO DISASSEMBLE RESIDES IN ╥┴═ UNDER THE ┬┴╙╔├ OR ╦ERNAL ╥╧═. ╔F YOU SET THIS OPTION TO ╬╧, YOU CAN DISASSEMBLE YOUR 64'S OPERATING SYSTEM AND EVEN BASIC ITSELF.
╘HE DISASSEMBLY MAY BE PAUSED BY PRESSING ANY KEY. ╘O RESUME THE DISASSEMBLY, PRESS THE SPACE BAR. ╨RESSING ╞1 INSTEAD DISPLAYS THE MAIN MENU, ALLOWING YOU TO CHANGE ANY OF THE INITIAL SETTINGS. ╨RESS ╞1 TO RESUME THE DISASSEMBLY.
═┼═╧╥┘ ├╧╬╞╠╔├╘╙
╔T'S POSSIBLE THAT THE CODE YOU WANT TO DISASSEMBLE RESIDES IN ┬┴╙╔├'S MEMORY (2048-40959) OR IN MEMORY LOCATIONS 820-840. ╔F THIS IS THE CASE, ╙MART ─ISASSEMBLER WILL OVERWRITE AND DESTROY THE ═╠ PROGRAM. ╘HERE ARE SEVERAL WAYS TO PREVENT THIS FROM HAPPENING.
╔F THE PROGRAM RESIDES IN ┬┴╙╔├'S MEMORY YOU CAN LOWER THE TOP OF ┬┴╙╔├ BY TYPING
╚=╔╬╘(┴─/256):╨╧╦┼56,╚:╨╧╦┼55,(┴─-256*╚):├╠╥
WHERE ┴─ IS THE ADDRESS OF THE NEW TOP OF ┬┴╙╔├ (MAKE SURE ┴─ IS LESS THAN THE STARTING ADDRESS OF THE ═╠ PROGRAM.) ┼NTER THIS COMMAND IN DIRECT MODE BEFORE YOU LOAD AND RUN ╙MART ─ISASSEMBLER.
╙MART ─ISASSEMBLER STORES A SMALL ═╠ SUBROUTINE AT 820-840. ╔F YOUR ═╠ PROGRAM RESIDES IN THIS AREA, ╙MART ─ISASSEMBLER'S SUBROUTINE MUST BE RELOCATED. ├HANGE THE VALUE OF THE VARIABLE ═╠ IN LINE 30 TO ANY LOCATION WITH AT LEAST 20 BYTES OF UNUSED ╥┴═.
├USTOMIZING THE PROGRAM
┘OU MAY INCLUDE YOUR OWN ADDRESS LABELS BY ADDING ─┴╘┴ STATEMENTS TO ╙MART ─ISASSEMBLER AND CHANGING THE VALUE OF THE VARIABLE ╬╠ IN LINE 20. ╬OTE THAT THE 39 ╦ERNAL ╥╧═ ROUTINE LABLES HAVE ALREADY BEEN ENTERED, SO THERE IS NO NEED TO ADD THEM.
╞OR EXAMPLE, IF YOU KNOW A SUBROUTINE AT LOCATION 50000 IS A STRING INPUT ROUTINE, YOU MIGHT WANT TO LABEL IT AS ╔╬╙╘╥╔╬╟. ┼NTER A LABEL AND ADDRESS (IN DECIMAL) AS A DATA STATEMENT AT THE END OF ╙MART ─ISASSEMBLER. ╞OR THIS EXAMPLE, YOU TYPE
2000 ─┴╘┴ ╔╬╙╘╥╔╬╟,5000
┴DD THE NUMBER OF ADDITIONAL ADDRESS LABELS TO THE VARIABLE ╬╠. ╔N THIS CASE, ONE ADDRESS LABEL HAS BEEN ADDED, SO LINE 20 SHOULD BE REENTERED AS
20 ╬╠=40
[╬╠ WAS 39 BEFORE ╔╬╙╘╥╔╬╟ WAS ADDED.) ╘HEREAFTER, ALL ╩╙╥ 50000 OR ╩═╨ 50000 STATEMENTS WILL BE REPLACED BY ╩╙╥ ╔╬╙╘╥╔╬╟ AND ╩═╨ ╔╬╙╘╥╔╬╟, RESPECTIVELY.